import pandas as pd # Manipulación y carga de datos.
import plotly.express as px # Gráficos intéractivos.
import warnings # Ignorar mensajes de advertencia.
import pandoc # PDF
warnings.filterwarnings("ignore")
df=pd.read_csv("insurance.csv")
df.head()
| age | sex | bmi | children | smoker | region | charges | |
|---|---|---|---|---|---|---|---|
| 0 | 19 | female | 27.900 | 0 | yes | southwest | 16884.92400 |
| 1 | 18 | male | 33.770 | 1 | no | southeast | 1725.55230 |
| 2 | 28 | male | 33.000 | 3 | no | southeast | 4449.46200 |
| 3 | 33 | male | 22.705 | 0 | no | northwest | 21984.47061 |
| 4 | 32 | male | 28.880 | 0 | no | northwest | 3866.85520 |
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1338 entries, 0 to 1337 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 age 1338 non-null int64 1 sex 1338 non-null object 2 bmi 1338 non-null float64 3 children 1338 non-null int64 4 smoker 1338 non-null object 5 region 1338 non-null object 6 charges 1338 non-null float64 dtypes: float64(2), int64(2), object(3) memory usage: 73.3+ KB
El dataframe carece de valores faltantes.
{col:list(df[col].unique()) for col in df.select_dtypes("object")}
{'sex': ['female', 'male'],
'smoker': ['yes', 'no'],
'region': ['southwest', 'southeast', 'northwest', 'northeast']}
Visualizamos aquellos valores tipo texto.
def pie_plot(feature,colors):
return px.pie(df,names=feature,color=feature,
hole=0.3,color_discrete_map=colors,title=feature + " percent")
Creamos una función con el propósito de crear gráficos de pastel para automatizar código.
pie_plot("smoker",{"yes":"red","no":"#77dd77"})
pie_plot("sex",{"male":"skyblue","female":"pink"})
pie_plot("region",{'southwest':"#fdcae1",
'southeast':'#84b6f4',
'northwest':'0096d2',
'northeast':"ffffbf"})
def scater_plot(x_var,title,colors):
return px.scatter(df,x=x_var,
y="charges",
trendline="ols",
color="smoker",
title=title,
color_discrete_map=colors)
Creamos una función similar a la anterior. Con la diferencia para la creación de gráficos de dispersión.
scater_plot("bmi","BMI vs charges",{"yes":"#77dd77","no":"#ff6961"})
El BMI respecto al precio del seguro. Mantine una tendencia lineal para los fumadores. Caso contrario se mantine constante. Y posiblemente contenga valores atípicos.
scater_plot("age","Age vs Charges",{"yes":"#77dd77","no":"#ff6961"})
La varieble edad está correlacionada con los usuarios que no fuman. Mantiene una tendencia lineal.
px.histogram(df,x="charges",color="smoker",color_discrete_map={"yes":"#77dd77","no":"#ff6961"})
px.box(df,x="smoker",y="charges",color="region",title="Smoker vs Region vs Charges")
Merdiante el histograma y el gráfico de caja. Confirmamos la presencia de valores atípicos. Por lo cual tenemos que darle un procesamiento especial.
Técnicamente los valores atípicos podemos darle el mismo tratamineto para los valores perdidos.
px.box(df,x="bmi",title="BMI")
Con la gráfica interactiva. Presenciamos valores que se salen de lo normal. A su vez valores con un bajo nivel de BMI.